# ===================================================
# 文件服务系统 Dockerfile
# 基于 Python 3.11 构建 FastAPI 应用容器
# ===================================================

# 使用官方 Python 基础镜像
# slim 版本比完整版体积小，但包含构建和运行 Python 应用所需的基本工具
FROM python:3.11-slim

# 设置工作目录
# 容器内所有操作将在此目录进行
WORKDIR /app

# 设置环境变量
# PYTHONDONTWRITEBYTECODE=1: 防止 Python 生成 .pyc 文件，减小镜像大小
# PYTHONUNBUFFERED=1: 确保 Python 输出不被缓存，便于实时查看日志
# TZ=Asia/Shanghai: 设置时区为亚洲/上海
ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    TZ=Asia/Shanghai

# 安装系统依赖
# build-essential: 包含基本的构建工具如 gcc
# curl: 用于健康检查和下载
# libpq-dev: PostgreSQL 开发库，用于 psycopg2 构建
# 最后清理 apt 缓存，减小镜像体积
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    curl \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制项目文件
# 首先复制依赖文件，利用 Docker 缓存机制
COPY requirements.txt .
# 复制应用代码
COPY app/ app/
# 复制环境变量文件
COPY .env .

# 创建日志目录
# 确保应用启动时能够写入日志
RUN mkdir -p logs

# 安装 Python 依赖
# --no-cache-dir: 不缓存下载的包，减小镜像体积
RUN pip install --no-cache-dir -r requirements.txt

# 暴露端口
# 与 docker-compose.yml 中的端口映射配合使用
EXPOSE 8000

# 启动命令
# uvicorn: ASGI 服务器
# app.main:app: 应用入口点
# --host 0.0.0.0: 监听所有网络接口
# --port 8000: 监听端口
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] 